package AnalizadorSintactico;

import java.util.ArrayList;

import javax.swing.tree.DefaultMutableTreeNode;

import AnalizadorLexico.Lexema;

public class BloqueTryCatch extends Sentencia {

	private ArrayList<Sentencia> sentenciasTry;
	private Lexema tipoExcepcion;
	private Lexema identificador;
	private ArrayList<Sentencia> sentenciasCatch;
	private ArrayList<Sentencia> sentenciasFinally;

	public BloqueTryCatch(ArrayList<Sentencia> sentenciasTry,
			Lexema tipoExcepcion, Lexema identificador,
			ArrayList<Sentencia> sentenciasCatch,
			ArrayList<Sentencia> sentenciasFinally) {
		this.sentenciasTry = sentenciasTry;
		this.tipoExcepcion = tipoExcepcion;
		this.identificador = identificador;
		this.sentenciasCatch = sentenciasCatch;
		this.sentenciasFinally = sentenciasFinally;
	}

	public BloqueTryCatch(ArrayList<Sentencia> sentenciasTry,
			Lexema tipoExcepcion, Lexema identificador,
			ArrayList<Sentencia> sentenciasCatch) {
		this.sentenciasTry = sentenciasTry;
		this.tipoExcepcion = tipoExcepcion;
		this.identificador = identificador;
		this.sentenciasCatch = sentenciasCatch;
	}

	@Override
	public DefaultMutableTreeNode getSubArbol() {
		DefaultMutableTreeNode nodo = new DefaultMutableTreeNode(this);
		if (sentenciasTry != null) {
			DefaultMutableTreeNode nodoT = new DefaultMutableTreeNode(
					"sentencias Try");
			for (Sentencia i : sentenciasTry) {
				nodoT.add(i.getSubArbol());
			}
			nodo.add(nodoT);
		}
		if (sentenciasCatch != null) {
			DefaultMutableTreeNode nodoC = new DefaultMutableTreeNode(
					"sentencias Catch: " + tipoExcepcion.getLexema() + " id: "
							+ identificador.getLexema());
			for (Sentencia i : sentenciasCatch) {
				nodoC.add(i.getSubArbol());
			}
			nodo.add(nodoC);
		}
		if (sentenciasFinally != null) {
			DefaultMutableTreeNode nodoF = new DefaultMutableTreeNode(
					"sentencias Finally");
			for (Sentencia i : sentenciasFinally) {
				nodoF.add(i.getSubArbol());
			}
			nodo.add(nodoF);
		}
		return nodo;
	}

	@Override
	public String toString() {
		return "bloque Try..Catch";
	}
}
